﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.Entitys
{
    /// <summary>
    /// 薪酬发放登记表
    /// </summary>
    public class SG
    {
        /// <summary>
        /// 唯一标识符，作为主键且为自动增长列，用于在系统中唯一确定该薪酬发放记录，类型为整数。
        /// </summary>
        [Key]
        public int SgrId { get; set; }

        /// <summary>
        /// 薪酬发放编号，用于唯一标识每次的薪酬发放操作，方便在系统内进行查询、关联以及相关业务操作，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string SalaryGrantId { get; set; }

        /// <summary>
        /// 薪酬标准单编号，用于关联对应的薪酬标准单，确定本次发放依据的薪酬标准，类型为字符串（可根据实际编号格式调整具体类型）。
        /// </summary>
        public string SalaryStandardId { get; set; }

        /// <summary>
        /// 一级机构编号，用于明确参与本次薪酬发放的员工所在的一级机构，方便在组织架构层面进行分类管理以及相关业务操作，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? FirstKindId { get; set; }

        /// <summary>
        /// 一级机构名称，直观展示参与本次薪酬发放的员工所属的一级机构具体称呼，便于用户识别和理解，类型为字符串。
        /// </summary>
        public string? FirstKindName { get; set; }

        /// <summary>
        /// 二级机构编号，进一步细化参与本次薪酬发放的员工所在的机构层级，使其能准确关联到对应的二级机构，类型为字符串（具体类型依实际情况而定）。
        /// </summary>
        public string? SecondKindId { get; set; }

        /// <summary>
        /// 二级机构名称，便于清晰呈现参与本次薪酬发放的员工所属二级机构的具体称谓，有助于区分不同二级机构下的员工，类型为字符串。
        /// </summary>
        public string? SecondKindName { get; set; }

        /// <summary>
        /// 三级机构编号，精准定位参与本次薪酬发放的员工所在的三级机构，便于系统内更细致的机构相关操作以及数据关联，类型为字符串（具体类型可按实际编号规则确定）。
        /// </summary>
        public string? ThirdKindId { get; set; }

        /// <summary>
        /// 三级机构名称，明确展示参与本次薪酬发放的员工所在三级机构的具体名称，类型为字符串。
        /// </summary>
        public string? ThirdKindName { get; set; }

        /// <summary>
        /// 总人数，记录本次薪酬发放涉及的员工总数量，类型为整数。
        /// </summary>
        public int HumanAmount { get; set; }

        /// <summary>
        /// 标准薪酬总金额，依据薪酬标准单计算得出的本次应发放的薪酬总额（未扣除相关费用前），类型为 decimal（用于精确的金额计算）。
        /// </summary>
        public decimal SalaryStandardSum { get; set; }

        /// <summary>
        /// 实发总金额，扣除各种税费、社保等费用后实际发放给员工的薪酬总额，类型为 decimal。
        /// </summary>
        public decimal SalaryPaidSum { get; set; }

        /// <summary>
        /// 登记人，记录最初将该薪酬发放信息录入系统的人员相关信息，类型为字符串。
        /// </summary>
        public string Register { get; set; }

        /// <summary>
        /// 登记时间，记录薪酬发放信息在系统中首次登记的时间，类型为DateTime。
        /// </summary>
        public DateTime RegistTime { get; set; }

        /// <summary>
        /// 复核人，明确负责对该薪酬发放信息进行复核操作的人员相关信息，类型为字符串。
        /// </summary>
        public string? Checker { get; set; }

        /// <summary>
        /// 复核时间，对应薪酬发放信息复核操作完成的时间点，类型为DateTime。
        /// </summary>
        public DateTime? CheckTime { get; set; }

        /// <summary>
        /// 复核状态，用于标记该薪酬发放信息当前是否经过复核以及复核的结果情况等，类型为字符串（常见取值如"已复核"、"待复核"等）。
        /// </summary>
        public string CheckStatus { get; set; }
    }
}
